Skip to content

Conversation

@sksn12
Copy link
Contributor

@sksn12 sksn12 commented Jan 6, 2026

🚀 이슈 번호

Resolve: {#2274}

🧩 문제 해결

스스로 해결:

🔎 접근 과정

문제 해결을 위한 접근 방식을 설명해주세요.

  • 🔹 어떤 알고리즘을 사용했는지 : 재귀
  • 🔹 어떤 방식으로 접근했는지 : 처음에는 모든 경우의 수를 만들고 현재 경우가 되는지 확인했으나 시간초과, GPT한테 물어보니 각 팀마다 붙는 경우의수를 고정으로 만들어두고 재귀로 돌아가면서 승패를 결정하고 비교 이러면 시간복잡도가 많이 내려가서 통과

⏱️ 시간 복잡도

시간 복잡도 분석을 작성해주세요.
최악의 경우 수행 시간은 어느 정도인지 분석합니다.

  • Big-O 표기법: O(?)
  • 이유:

💻 구현 코드

import java.io.*;
import java.util.*;

public class Main {

    static int[][] arr = new int[6][3]; // 승 무 패
    static int[][] match = new int[15][2];
    static boolean ok;

    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;

        // 15경기 조합 미리 생성
        int idx = 0;
        for (int i = 0; i < 6; i++) {
            for (int j = i + 1; j < 6; j++) {
                match[idx][0] = i;
                match[idx][1] = j;
                idx++;
            }
        }

        for (int t = 0; t < 4; t++) {
            ok = false;
            st = new StringTokenizer(br.readLine());

            boolean valid = true;

            for (int i = 0; i < 6; i++) {
                arr[i][0] = Integer.parseInt(st.nextToken());
                arr[i][1] = Integer.parseInt(st.nextToken());
                arr[i][2] = Integer.parseInt(st.nextToken());

                //  사전 검증
                if (arr[i][0] + arr[i][1] + arr[i][2] != 5) {
                    valid = false;
                }
            }

            if (valid) dfs(0);

            System.out.print(ok ? 1 : 0);
            if (t < 3) System.out.print(" ");
        }
    }

    static void dfs(int game) {
        if (ok) return;

        if (game == 15) {
            ok = true;
            return;
        }

        int a = match[game][0];
        int b = match[game][1];

        // a 승 b 패
        if (arr[a][0] > 0 && arr[b][2] > 0) {
            arr[a][0]--;
            arr[b][2]--;
            dfs(game + 1);
            arr[a][0]++;
            arr[b][2]++;
        }

        // 무승부
        if (arr[a][1] > 0 && arr[b][1] > 0) {
            arr[a][1]--;
            arr[b][1]--;
            dfs(game + 1);
            arr[a][1]++;
            arr[b][1]++;
        }

        // a 패 b 승
        if (arr[a][2] > 0 && arr[b][0] > 0) {
            arr[a][2]--;
            arr[b][0]--;
            dfs(game + 1);
            arr[a][2]++;
            arr[b][0]++;
        }
    }
}

@sksn12 sksn12 self-assigned this Jan 6, 2026
@sksn12 sksn12 requested a review from Eunjin3395 as a code owner January 6, 2026 14:38
@sksn12 sksn12 linked an issue Jan 6, 2026 that may be closed by this pull request
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

260106 : 코딩테스트

2 participants